﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Espam.Idiomas.Decimo.Tesis.Negocio;
using Microsoft.Reporting.WebForms;
using System.Data;
using System.IO;
using System.Text;
using System.Web.Services;

namespace Espam.Idiomas.Decimo.Tesis.Web
{
    public partial class UI_LlistOfStudents : System.Web.UI.Page
    {
        string validaSession = "";
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                Response.Cache.SetCacheability(HttpCacheability.ServerAndNoCache);
                Response.Cache.SetAllowResponseInBrowserHistory(false);
                Response.Cache.SetNoStore();

                if (Session["userEspamIdiomasVarSession001"] == null || Session["rolEspamIdiomasVarSession003"] == null)
                {
                    validaSession = "NoHaIniciadoSession";
                    Response.Redirect("UI_Login.aspx?validaSession=" + validaSession);
                }
                else if (Session["userEspamIdiomasVarSession001"] != null && Session["rolEspamIdiomasVarSession003"].ToString() == "Docente")
                {
                    CargarDdlNiveles();
                    ddlNivel.AutoPostBack = true;
                    ddlHorario.AutoPostBack = true;


                }
                else if (Session["userEspamIdiomasVarSession001"] != null && Session["rolEspamIdiomasVarSession003"].ToString() == "Administradores")
                {
                    Response.Redirect("Default.aspx");
                }
                else if (Session["userEspamIdiomasVarSession001"] != null && Session["rolEspamIdiomasVarSession003"].ToString() == "Alumno")
                {
                    Response.Redirect("UI_DashboardStudents.aspx");

                }
            }
        }

        private void CargarDdlNiveles()
        {
            ListadoNiveles oListados=new ListadoNiveles();
            List<Nivel> lista = new List<Nivel>();
            oListados.idDocente = (int)Session["idDocenteEspamIdiomasVarSession009"];
            lista = oListados.ConsultarListaNivelDisponibles();
            if (lista.Count==0)
            {
                idMensajeListas.Visible = true;
                lblMensajeErrorListaEstudiantes.Text = "SIN MÓDULOS ASIGNADOS HASTA EL MOMENTO";
                tdNivel.Visible = false;
                ddlNivel.Visible = false;
                tabla.Visible = false;
            }
            else
            {
                lista.Insert(0,new Nivel() { nivel=0,equivalente="<elige un nivel>"});
                ddlNivel.DataSource = lista;
                ddlNivel.DataTextField="equivalente";
                ddlNivel.DataValueField = "nivel";
                ddlNivel.DataBind();
                idMensajeListas.Visible = false;
                lblMensajeErrorListaEstudiantes.Text = "";
                tabla.Visible = true;
            }
           
        }
        private void cargarDdlHorarios()
        {
            List<Horarios> lista = new List<Horarios>();
            ListadoHorarios oListadosH = new ListadoHorarios();
            oListadosH.idDocente = (int)Session["idDocenteEspamIdiomasVarSession009"];
            oListadosH.nivel = int.Parse(ddlNivel.SelectedValue);
            lista = oListadosH.getHorariosListabyDocente();
            lista.Insert(0, new Horarios() { idHorario = 0, horario = "<elige un horario>" });
            ddlHorario.DataSource = lista;
            ddlHorario.DataTextField = "horario";
            ddlHorario.DataValueField = "idModulo";
            ddlHorario.DataBind();
        }

        private void cargarGridListaDocentes()
        {
            Usuarios oUsu = new Usuarios();
            oUsu.idDocente = (int)Session["idDocenteEspamIdiomasVarSession009"];
            oUsu.nivel = int.Parse(ddlNivel.SelectedValue);
            oUsu.idHorario = int.Parse(ddlHorario.SelectedValue);
            gvListaDocentes.DataSource = oUsu.GetListaEstudiantesByDocente();
            gvListaDocentes.DataBind();
        }

        protected void btnGenerarLista_Click(object sender, EventArgs e)
        {

            if (ddlHorario.SelectedIndex==0 || ddlNivel.SelectedIndex==0)
            {

            }
            else
            {
                if (btnGenerarLista.Text == "Exportar a excel")
                {
                     //ExportGridToExcel();
                     CrearReporte();
                }
                else
                {
                    cargarGridListaDocentes();
                    btnGenerarLista.Text = "Exportar a excel";
                    tableListaGeneradaEstudiantes.Visible = true;
                }  
            }
        }

        private void CrearReporte()
        {
            Usuarios oUsu = new Usuarios();
            
           // oUsu.idDocente = (int)Session["idDocenteEspamIdiomasVarSession009"];
            //oUsu.nivel = int.Parse(ddlNivel.SelectedValue);
            //oUsu.idHorario = int.Parse(ddlHorario.SelectedValue);
            //DataSet ds = new DataSet();

            int idDocente = (int)Session["idDocenteEspamIdiomasVarSession009"];
            EspamIdiomasDataSet.sp_getListaEstudiantesByDocenteDataTable dt = new EspamIdiomasDataSet.sp_getListaEstudiantesByDocenteDataTable();
            EspamIdiomasDataSetTableAdapters.sp_getListaEstudiantesByDocenteTableAdapter da = new EspamIdiomasDataSetTableAdapters.sp_getListaEstudiantesByDocenteTableAdapter();
            da.Fill(dt, idDocente, int.Parse(ddlNivel.SelectedValue), int.Parse(ddlHorario.SelectedValue));

            ReportViewer viewer = new ReportViewer();
            ReportDataSource RD = new ReportDataSource();
            RD.Value = dt;
            RD.Name = "DataSet1";
            //viewer.LocalReport.ReportPath = Server.MapPath("Reports/Teachers/AlumnosLListado.rdlc");
            viewer.LocalReport.DataSources.Clear();
            viewer.LocalReport.DataSources.Add(RD);
            //viewer.LocalReport.ReportEmbeddedResource = "ListadoEstudiantes.rdlc";
            viewer.LocalReport.ReportPath = Server.MapPath("Reports/Teachers/ListadoEstudiantes.rdlc");
            viewer.LocalReport.Refresh();

            string mimeType;
            string encoding;
            string fileNameExtension;
            string[] streams;
            Warning[] warnings;
            byte[] pdfContent = viewer.LocalReport.Render("EXCEL", string.Empty, out mimeType, out encoding, out fileNameExtension, out streams, out warnings);

            this.Response.Clear();
            this.Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
            this.Response.AddHeader("Content-disposition", "attachment; filename=ListadoEstudiantes.xls");
            this.Response.BinaryWrite(pdfContent);
            this.Response.End();
        }

        public override void VerifyRenderingInServerForm(Control control)
        {
            //required to avoid the run time error "  
            //Control 'GridView1' of type 'Grid View' must be placed inside a form tag with runat=server."  
        }  

        private void ExportGridToExcel()
        {
            Response.Clear();
            Response.Buffer = true;
            Response.ClearContent();
            Response.ClearHeaders();
            Response.Charset = "";
            string FileName = "Listado.xls";
            StringWriter strwritter = new StringWriter();
            HtmlTextWriter htmltextwrtter = new HtmlTextWriter(strwritter);
            Response.Cache.SetCacheability(HttpCacheability.NoCache);
            Response.ContentType = "application/vnd.ms-excel";
            Response.AddHeader("Content-Disposition", "attachment;filename=" + FileName);
            Response.Charset = "UTF-8";
            gvListaDocentes.GridLines = GridLines.Both;
            gvListaDocentes.HeaderStyle.Font.Bold = true;
            gvListaDocentes.RenderControl(htmltextwrtter);
            Response.ContentEncoding = Encoding.Default;
            Response.Write(strwritter.ToString());
            Response.End();
        }


        protected void btnCancelar_Click(object sender, EventArgs e)
        {
            Response.Redirect("UI_LlistOfStudents.aspx");
        }
        [WebMethod ]
        public static List<Horarios> getHorarios(int valor)
        {
            List<Horarios> lista = new List<Horarios>();
            ListadoHorarios oListadosH = new ListadoHorarios();
            oListadosH.idDocente = 1007;
            oListadosH.nivel = valor;
            lista = oListadosH.getHorariosListabyDocente();
            lista.Insert(0, new Horarios() { idHorario = 0, horario = "<elige un horario>" });
            return lista;
            
        }

        protected void ddlNivel_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (ddlNivel.SelectedIndex == 0)
            {
                filaAceptar.Visible = false;
                //ddlHorario.Visible = false;
                tdHorario.Visible = false;
                tableListaGeneradaEstudiantes.Visible = false;
                cargarDdlHorarios();
            }
            else
            {
                btnGenerarLista.Text = "Generar Lista";
                cargarDdlHorarios();
                tableListaGeneradaEstudiantes.Visible = false;
                ddlHorario.Visible = true;
                tdHorario.Visible = true;
            }
        }

        protected void ddlHorario_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (ddlHorario.SelectedIndex == 0)
            {
                filaAceptar.Visible = false;
                tableListaGeneradaEstudiantes.Visible = false;
            }
            else
            {
                btnGenerarLista.Text = "Generar Lista";
                filaAceptar.Visible = true;
                tableListaGeneradaEstudiantes.Visible = false;
            }
        }
    }
}